<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" type="text/css" href="../公用CSS文件/all.css" />
	<meta charset="utf-8">
	<script type="text/javascript" src="../js/jquery.min.js"></script> 	<script type="text/javascript" src="../js/js.js"></script>
</head>
<body>
<div class="dt">网站优化规则</div>
<ul>
	<li>如果一个方法可静态化，就对它做静态声明。访问速度可提升4倍</li>
	<li>echo比print快，输出一般使用echo</li>
	<li>在执行循环之前确定最大循环数，不要每循环一次都计算<mark>其他的需要反复使用一个恒定的函数返还值或其他需要系统运算的结果值也一样</mark></li>
	<li>注销那些不用的变量尤其是占用内存更多的，如对象等，打开的资源流不需要使用也必须关闭（特殊的GD函数生成图像需要销毁）</li>
	<li>尽量避免使用__get、__set、__autoload这些魔术方法，析构函数和构造函数性能消耗较小</li>
	<li>require_once性能消耗很大，尽量避免使用</li>
	<li>在加载文件的时候尽量使用完整的路径，解析操作系统路径所需的时间会更少</li>
	<li>如果你想知道脚本何时开始执行，使用$_server['request_time']<mark>（全部大写）</mark>比time（）准确，time（）指向的是time函数被调用的时间</li>
	<li>如果能使用函数完成的功能就不要使用正则表达式，因为后者性能消耗大</li>
	<li>str_replace（）函数比preg_replace（）函数快，但strtr（）函数的效率是str_replace函数的四倍<mark>普通的内置函数效率总是比正则函数快</mark></li>
	<li>switch语句比if else语句效率快，性能消耗也低</li>
	<li>用@屏蔽错误消息的做法比较低效，error_reporting(0)是禁止了所有的错误类型：严重的错误、解析的错误、语法的错误、拼写错误、警告错误</li>
	<li>打开apache的mod_deflate模块会加快页面打开速度</li>
	<li>$row['id']的效率是$row[id]的7倍，如果屏蔽错误让后者执行</li>
	<li>递增一个全局变量要比递增一个局部变量慢2倍</li>
	<li>递增一个对象属性要比递增一个局部变量慢3倍<mark>应该是访问变量的速度慢3倍，递增只是表征</mark></li>
	<li>递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍</li>
	<li>输出多个字符串时，用逗号隔开的语法连续输出要比一个个输出快<mark>只有echo能这么做，但输出字符串不会去使用print，print_r和vardump用来测试较多，print比较边缘化</mark></li>
	<li>Apache解析一个php脚本的时间要比解析一个静态html页面慢2至10倍，尽量多用静态html页面</li>
	<li>除非脚本可以缓存，否则每次调用都会重新编译一次。引入一套php缓存机制通常可以提升25%至100%的性能<mark>比如smarty模板会在页面被访问后生成一个缓存文件XXXX.index.html.php</mark></li>
	<li>尽量做缓存，可使用memcached、redis等，可加速动态web应用程序，减轻数据库负载</li>
	<li>当执行变量的递增或递减时，$i++会比++$i慢一些，这种差异是php特有的，并不适用于其他语言</li>
	<li>并不是所有代码都需要面向对象（OOP），面向对象往往开销很大，每个方法和属性的调用都会消耗很多内存</li>
	<li>如果某项功能可以用内置函数做到，尽量使用内置函数</li>
</ul>
<div class="dt">php代码错误类型</div>
<ul>
	<li>E_PARSE，语法解析错误</li>
	<li>E_ALL，所有错误</li>
	<li>E_NOTICE，通知错误</li>
	<li>E_WARNING，警告错误</li>
	<li>E_ERROR，运行错误</li>
</ul>
<div class="dt">error_reporting屏蔽错误函数参数</div>
<ul>
	<div class="ltable showimg">error_reporting参数语法</div>
	<div class="img">
		<table>
			<tr>
				<th>格式</th><th>示范</th><th>说明</th>
			</tr>
			<tr>
				<td>以“|”隔开</td><td>error_reporting(E_ERROR | E_WARNING | E_PARSE)</td><td>屏蔽指定的几种错误</td>
			</tr>
			<tr>
				<td>以“^”指定排除</td><td>error_reporting(E_ALL ^ E_NOTICE)</td><td>在“^”前指定范围排除“^”后面的错误（“^”前可以是其他的组合不一定是E_ALL）</td>
			</tr>
			<tr>
				<td>0和-1</td><td>error_reporting(0)</td><td>0为屏蔽所有错误，-1报告所有错误</td>
			</tr>
		</table>
		<li>reporting的意思其实是报告，所以这个用来屏蔽错误的函数其实是指定之后的所有代码显示何种错误（虽然0和-1比较古怪）</li>
	</div>

	<div class="ltable showimg">error_reporting参数对应意义</div>
	<div class="img">
		<table>
			<tr>
				<th>参数常量</th><th>意义</th><th>封装的值</th>
			</tr>
			<tr>
				<td>E_ALL</td><td>所有错误</td><td>32767</td>
			</tr>
			<tr>
				<td>E_NOTICE</td><td>警告错误，在脚本正常运行下发生的代码错误，通常是变量未定义或者将数组做字符串使用等</td><td>8</td>
			</tr>
			<tr>
				<td>E_WARNING</td><td>危险错误</td>
			</tr>
		</table>
		<li>官网的推荐是为了以后的兼容，应使用常量指定错误</li>
	</div>

</ul>
<div class="dt">php错误处理</div>
<ul>
	<li>在调试代码的时候需要显示php的报错，可是当php项目完成后不需要报错，这时候需要屏蔽错误并将错误记录到错误日志文件中</li>
	<li>ini_set('display_errors','On');<br/> 
	include '需要调试的文件路径';<br/>
	</li>
	<li>php有代码最大的运行时间，超过30秒会抛出致命错误，可以使用set_time_limit()设置脚本最大执行时间，设置0为永久有效</li>
</ul>

<div class="asdt"><a href="php异常处理.txt">直接看笔记</a></div>

</body>
</html>